<?php

namespace app\controller\test;


use app\logic\test\ThinkCacheLogic;
use think\facade\Cache;
use think\facade\Db;

class TpCache extends Base
{
	// TODO think-orm 自带缓存测试
	
	/**
	 *
	 * TODO think-orm 查询是缓存，通过Cache::get('key')获取不到数据，所以不能进行下一步测试
	 *    如果可以获取数据则可以修改：
	 *      修改与使用1、在查询中使用->cache($key)保存数据
	 *      修改与使用2、在查询后，根据结果或传递的where绑定刚使用$key
	 *      修改与使用3、在修改，添加，删除操作后，从绑定找到key，从而删除缓存
	 *
	 * // 成功实现绑定缓存
	 *
	 */
	
	// 模型缓存
	
	
	//  查询两次 ，第二次没有执行查询语句
	// http://www.light.com/test/tp-cache/one
	public function one()
	{
		$id   = 1;
		$key  = 'id:'.$id;
		$info = Db::name('content_blog')->where('id', $id)->cache($key, 6000)->find();
		$data = Cache::get($key);
		
		// 获取缓存文件名 自己制作绑定
		$file = Cache::getCacheKey('name1');
		var_dump($file);
		
		$this->showMsg('获取缓存的数据', $data);
		$this->showMsg('获取查询语句', Db::getLastSql());
		$this->showMsg('获取查询得到的数据', $info);
	}
	
	//  查询详情
	//    实现成功：不论有没有数据都生成缓存，删除绑定后，重新查询
	// http://www.light.com/test/tp-cache/find
	public function find()
	{
		$logic = new ThinkCacheLogic();
		
		$id    = 10000;
		$id    = 1;
		$where = ['id' => $id];
		$table = 'content_blog';
		
		// 查询
		$info = $logic->find($table, $where);
		$this->showMsg('第一次获取缓存的数据', $info);
		$this->showMsg('第一次获取查询语句', Db::getLastSql());
		
		// 删除缓存
		$tags = $logic->makeBang($table, $where);   // where条件制作绑定
		$logic->deleteCacheBang($tags);
		
		$info = $logic->find($table, $where);
		$this->showMsg('删除绑定缓存后：获取缓存的数据', $info);
		$this->showMsg('删除绑定缓存后：获取查询语句', Db::getLastSql());
		
	}
	
	
	//  查询列表
	//    实现成功：不论有没有数据都生成缓存，删除绑定后，重新查询
	// http://www.light.com/test/tp-cache/list
	public function list()
	{
		$logic = new ThinkCacheLogic();
		

		$table = 'content_blog';
		$where = ['mtag_id'=>11];
		$where = ['mtag_id'=>15];  // 不存在的情况
		$field = '*';
		$page  = 1;
		$rows  = 20;
		$order = 'id ASC';
		
		
		// 查询
		$list = $logic->lists($table, $where, $field, $page, $rows, $order);
		//$this->showMsg('第一次获取缓存的数据', $list);
		$this->showMsg('第一次获取查询语句', Db::getLastSql());
		
		// 删除缓存
		$tags = $logic->makeBang($table, $where);   // where条件制作绑定
		$logic->deleteCacheBang($tags);
		
		$list = $logic->lists($table, $where, $field, $page, $rows, $order);
		//$this->showMsg('删除绑定缓存后：获取缓存的数据', $list);
		$this->showMsg('删除绑定缓存后：获取查询语句', Db::getLastSql());
	}
	
	############################################################################################
	
	// 输出
	protected function showMsg($msg, $var)
	{
		echo '<h5>'.$msg.'：</h5>';
		if(is_array($var)){
			var_dump($var);
		} else{
			echo $var;
		}
		
		echo '<br><br>';
	}
	
}


